/*
 * bw_net_cfg.h
 *
 *  Created on: 2018年10月9日
 *  Author: Degang.Wu (windragon@126.com)
 *  Desc:
 *
 *	example:
 */

#ifndef BW_NET_CFG_H_
#define BW_NET_CFG_H_

#include <stdio.h>
#include <string.h>

#ifdef __cplusplus
extern "C" {
#endif

#define 	BW_NET_CFG_ADDRLEN		(64)
#define 	ADDRSTRLEN 		(16)

#define 	BUF_PATH_LEN			(512)
#define 	BUF_LEN_512				(512)



typedef struct _stNetParam
{
	char	name[BW_NET_CFG_ADDRLEN];
	char	ipaddr[BW_NET_CFG_ADDRLEN];
	char	netmask[BW_NET_CFG_ADDRLEN];
	char	gateway[BW_NET_CFG_ADDRLEN];
	char 	mac[BW_NET_CFG_ADDRLEN];		//48位mac地址
	char	mac_str[BW_NET_CFG_ADDRLEN];	//字符串形式：00:0C:18:EF:FF:ED
	char	bootproto[BW_NET_CFG_ADDRLEN];
	int		ethid;
}stNetParam, *pstNetParam;

typedef enum
{
	BW_NET_IGMP_DEFAULT = 0,
	BW_NET_IGMP_V1 = 1,
	BW_NET_IGMP_V2 = 2,
	BW_NET_IGMP_V3 = 3,

	BW_NET_IGMP_NB
} eIGMPVer;

/*
 * 获取库的版本号，与git提交版本对应
 */
const char* bw_net_get_version();

/*
 * 获取网络参数，实际参数与配置文件结合
 * 成功返回0， 失败返回-1
 */
int bw_net_getparams(const char* ethname, pstNetParam pNet);

/*
 *	网络配置（通过操作网卡配置文件），配置失败则还原老配置
 *	适用于centos7
 */
int bw_net_set_cfg(const char* ethname, char* ipaddr, char* netmask, char* gateway);

/*
 * 设置网卡mac地址
 * 参数： mac—— char*字符串，如 00:0C:18:EF:FF:ED
 * 永久生效
 */
int bw_net_set_mac(const char* ethname, const char* mac);

/*
 * 网络初始化：
 * 1）初始化策略路由
 */
int bw_net_init_cfg();

/*
 * 设置IGMP版本
 * v2, v3, default
 * 立即生效，重启失效
 */
void bw_net_set_igmp(eIGMPVer ver);

/*
 * 检查网卡名是否合法（是否为本机中的网卡）
 * 合法返回1，不合法返回0
 */
int bw_net_exist_interface(const char* ethname);

/*
 * 获取网卡的index
 * 返回值：-1,失败，表示未找到对应网卡
 * 		  >0 ， index值
 */
int bw_net_get_interface_idx(const char* ethname);

/*
 * 从接口上获取ip地址
 * 成功返回0， 失败返回-1
 */
int bw_net_get_interface_ipaddr(const char* ethname, char* buf, int buflen);

/*
 * 从接口获取当前网络参数：IP，NETMASK，MAC
 * 成功返回0， 失败返回-1
 */
int bw_net_get_interface_param(const char* ethname, pstNetParam pNet);

/*
 * 从配置文件获取网络参数
 * 成功返回0， 失败返回-1
 */
int bw_net_get_cfg_param(const char* ethname, pstNetParam pNet);


#ifdef __cplusplus
}
#endif


#endif /* BW_NET_CFG_H_ */
